Add ostree_repo_remote_list()
authorMatthew Barnes <mbarnes@redhat.com>
Tue, 16 Dec 2014 15:29:09 +0000 (10:29 -0500)
committerMatthew Barnes <mbarnes@redhat.com>
Wed, 17 Dec 2014 21:05:37 +0000 (16:05 -0500)
Lists available remote names.

doc/ostree-sections.txt
src/libostree/ostree-repo.c
src/libostree/ostree-repo.h

index dcdf40bf652d717874f87dc8a1db7085bd77ea87..897d389bf2ae6734895d45ec967524ad14f7f0a1 100644 (file)
@@ -61,6 +61,7 @@ ostree_repo_get_mode
 ostree_repo_mode_from_string
 ostree_repo_get_config
 ostree_repo_copy_config
+ostree_repo_remote_list
 ostree_repo_get_parent
 ostree_repo_write_config
 OstreeRepoTransactionStats
index fb4ff91cbc21cf2d8507cf3fc640402f2eded355..9d581224fdf1ad7614266a03d1a2aa02201f030c 100644 (file)
@@ -880,6 +880,54 @@ ostree_repo_remote_change (OstreeRepo     *self,
   g_assert_not_reached ();
 }
 
+/**
+ * ostree_repo_remote_list:
+ * @self: Repo
+ * @out_n_remotes: (out) (allow-none): Number of remotes available
+ *
+ * List available remote names in an #OstreeRepo.  Remote names are sorted
+ * alphabetically.  If no remotes are available the function returns %NULL.
+ *
+ * Returns: (array length=out_n_remotes) (transfer full): a %NULL-terminated
+ *          array of remote names
+ **/
+char **
+ostree_repo_remote_list (OstreeRepo *self,
+                         guint      *out_n_remotes)
+{
+  char **remotes = NULL;
+  guint n_remotes;
+
+  g_mutex_lock (&self->remotes_lock);
+
+  n_remotes = g_hash_table_size (self->remotes);
+
+  if (n_remotes > 0)
+    {
+      GList *list, *link;
+      guint ii = 0;
+
+      remotes = g_new (char *, n_remotes + 1);
+
+      list = g_hash_table_get_keys (self->remotes);
+      list = g_list_sort (list, (GCompareFunc) strcmp);
+
+      for (link = list; link != NULL; link = link->next)
+        remotes[ii++] = g_strdup (link->data);
+
+      g_list_free (list);
+
+      remotes[ii] = NULL;
+    }
+
+  g_mutex_unlock (&self->remotes_lock);
+
+  if (out_n_remotes)
+    *out_n_remotes = n_remotes;
+
+  return remotes;
+}
+
 /**
  * ostree_repo_remote_get_url:
  * @self: Repo
index 7320f2c78b505b8aa9abb6a6f9002eec6fd478bd..ce786b1906c20b266ea615d244e398cb0998a603 100644 (file)
@@ -95,6 +95,9 @@ gboolean      ostree_repo_remote_change (OstreeRepo     *self,
                                          GCancellable   *cancellable,
                                          GError        **error);
 
+char **       ostree_repo_remote_list    (OstreeRepo *self,
+                                          guint      *out_n_remotes);
+
 gboolean      ostree_repo_remote_get_url (OstreeRepo   *self,
                                           const char   *name,
                                           char        **out_url,